import urllib2
import sys


def download(truc_a_telecharger, fichier_de_destination,
             # on attend un callback en parametre
             # met on en passe un par defaut
             afficher_le_progres=lambda *x, **y: sys.stdout.write('.')):

    u = urllib2.urlopen(truc_a_telecharger)
    # on chope la taille du fichier, ca permettra plus de choses
    taille_du_fichier = int(u.info().getheaders("Content-Length")[0])
    taille_de_bloc = 8192
    total_telecharge = 0

    with open(fichier_de_destination, 'w') as f:

        while True:

            # ici on appelle le callback en lui passant un maximum de param
            # pour qu il puisse faire le plus de chose possible
            afficher_le_progres(truc_a_telecharger, fichier_de_destination,
                                taille_du_fichier, total_telecharge)

            bout = u.read(taille_de_bloc)
            total_telecharge += taille_de_bloc

            if not bout:
                break

            f.write(bout)


if __name__ == "__main__":
    download('http://download.ted.com/talks/SirKenRobinson_2006.mp4', 'ted_talk_education.mp4')
